Google Cloud Storageのバケットソフト削除を試してみる
はじめに
データアナリティクス事業本部のkobayashiです。
Google Cloud Storageでソフト削除されたバケットを復元を試してみましたのでその内容をまとめます。
Cloud Storageのバケットのソフト削除されたバケット
Cloud Storage のソフト削除されたバケットの機能はバケットを削除した際にバケットに設定した保持期間中(削除(復元可能)ポリシー)を過ぎるまでは完全削除されず、復元処理によりバケットを元に戻せる機能です。バケットを復元することでバケット内のオブジェクトの復元も可能になります。
バケット作成時に設定できる保持期間は604,800 秒(7 日間)から7,776,000 秒(90 日間)となっています。
では早速試してみます。
ソフト削除されたバケットを試してみる
ソフト削除されたバケットを設定したBucketを作成・復元するには次のロールが必要なのでまずはカスタムロールを作成します。
storage.buckets.create
storage.buckets.restore
$ gcloud iam roles create customStorageRole \
--project={プロジェクトID} \
--title="Custom Storage Role" \
--description="Role for restoring buckets" \
--permissions=storage.buckets.create,storage.buckets.restore
作成したカスタムロールをユーザーに付与します。
$ gcloud projects add-iam-policy-binding {プロジェクトID} \
--member="user:{メールアドレス}" \
--role="projects/{プロジェクトID}/roles/customStorageRole" \
--condition=None
それでは保持期間(削除(復元可能)ポリシー)を設定したバケットを作成してみます。gcloud storage buckets create
コマンドを実行する際に--soft-delete-duration
オプションで保持期間を指定しますが、このオプションがなくてもデフォルトで7日間の保持期間が設定されます。
--soft-delete-duration
オプションで指定できるのは7日から90日間を設定出来ます。指定形式は2w1d
の形式でこの場合は15日間の保持期間が設定されます。
$ gcloud storage buckets create gs://cm-kobayshi-soft-deleted-1w --location=asia-northeast1 --soft-delete-duration=1w
$ gcloud storage buckets create gs://cm-kobayshi-soft-deleted --location=asia-northeast1 # デフォルトの7日間の保持期間の削除(復元可能)ポリシーが適用される
なお、保持期間(削除(復元可能)ポリシー)を設定しない場合は--soft-delete-duration
オプションを0
で設定します。
$ gcloud storage buckets create gs://cm-kobayshi-soft-deleted-none --location=asia-northeast1 --soft-delete-duration=0
保持期間(削除(復元可能)ポリシー)を設定したバケットを設定したBucketを作成できましたので早速削除してみます。
$ gcloud storage ls gs://cm-kobayshi-soft-deleted-1w
gs://cm-kobayshi-soft-deleted-1w/sample.csv
gs://cm-kobayshi-soft-deleted-1w/sample2.csv
gs://cm-kobayshi-soft-deleted-1w/sample3.csv
$ gcloud storage rm --recursive gs://cm-kobayshi-soft-deleted-1w
Removing objects:
Removing gs://cm-kobayshi-soft-deleted-1w/sample2.csv#1732477200350801...
Removing gs://cm-kobayshi-soft-deleted-1w/sample.csv#1732477134377931...
Removing gs://cm-kobayshi-soft-deleted-1w/sample3.csv#1732477200288086...
Completed 3/3
Removing buckets:
⠹Removing gs://cm-kobayshi-soft-deleted-1w/...
Completed 1/1
ソフト削除されたバケットを一覧表示してみます。
$ gcloud storage ls --buckets --soft-deleted --full
gs://cm-kobayshi-soft-deleted-1w/:
Storage Class: STANDARD
Location Type: region
Location Constraint: ASIA-NORTHEAST1
Versioning Enabled: None
Logging Configuration: None
Website Configuration: None
CORS Configuration: []
Lifecycle Configuration: None
Requester Pays Enabled: None
Default KMS Key: None
Time Created: 2024-11-24T18:44:55Z
Time Updated: 2024-11-24T19:38:42Z
Soft Delete Time: 2024-11-24T19:40:36Z
Hard Delete Time: 2024-12-01T19:41:35Z
Generation: 1732473894621743591
Metageneration: 1
Bucket Policy Only Enabled: False
Public Access Prevention: inherited
Soft Delete Policy:
{
"effectiveTime": "2024-11-24T18:44:55.314000+00:00",
"retentionDurationSeconds": "604800"
}
ACL:
...
Default ACL:
...
ソフト削除されたバケットを復元するにはGENERATION_NUMBER
が必要です。ソフト削除されたバケットを一覧表示で表示されたGeneration
がそれに当たります。今回の例ですと1732473894621743591
になります。
バケット名と世代番号を使って以下のコマンドでバケットを復元します。
$ gcloud storage restore gs://cm-kobayshi-soft-deleted-1w#1732473894621743591
Restoring gs://cm-kobayshi-soft-deleted-1w#1732473894621743591...
これでバケットは復元出来ました。
ただバケットを復元しても、ソフト削除時にバケット内にあったオブジェクトは復元されないため、削除時にバケット内にあったソフト削除されたオブジェクトを復元するにはソフト削除されたオブジェクトの復元をする必要があります。 ( 削除(復元可能)オブジェクトを使用する | Cloud Storage | Google Cloud )
$ gcloud storage restore gs://cm-kobayshi-soft-deleted-1w/** \
--async --deleted-after-time=2024-11-24 \
--deleted-before-time=2024-11-25
このコマンドは長時間実行オペレーションを実行するの復元するにはしばらく待つ必要があります。しばらく待ってから確認するとソフト削除されたバケット内のオブジェクトも復元されていることがわかります。
$ gcloud storage ls gs://cm-kobayshi-soft-deleted-1w
gs://cm-kobayshi-soft-deleted-1w/sample.csv
gs://cm-kobayshi-soft-deleted-1w/sample2.csv
gs://cm-kobayshi-soft-deleted-1w/sample3.csv
まとめ
Google Cloud Storageでソフト削除されたバケットを復元を試してみました。保持期間(削除(復元可能)ポリシー)を設定したバケットを削除するとソフト削除となり保持期間中はgcloud storage restore
コマンドで簡単に復元出来ました。ただしバケット内のオブジェクトは別途オブジェクトの復元が必要になるのでその点注意が必要です。
最後まで読んで頂いてありがとうございました。